package com.atguigu.bigdata.scala.chapter02

import java.io.{InputStream, ObjectInputStream}
import java.net.{ServerSocket, Socket}

object Scala08_Net_Slaver_Object {

    def main(args: Array[String]): Unit = {

        // TODO 从机
        // 启动服务，等待主机进行连接
        val server : ServerSocket = new ServerSocket(9999)
        println("从机已经准备好了，等待连接...")
        // 连接成功后，接收主机发送的数据，进行计算
        // accept方法如果没有客户端连接，那么会处于阻塞状态,直到连接上为止，才能继续执行
        val master: Socket = server.accept()
        println("主机连接成功，准备接收数据...")

        // 获取输入流
        val in: InputStream = master.getInputStream
        // 接收对象数据，需要使用对象输入流
        val objIn = new ObjectInputStream(in)
        // 读取对象
        val user = objIn.readObject()
        println("主机发送的数据为：" + user)
        objIn.close()

        master.close()
        server.close()

        // Q : 网络中到底发的什么数据？能不能发送字符串，数字，对象
        //     网络中传递不了字符串，数字，对象，传递的其实就是字节码（ASC码）
        // Q : 网络数据的传输是否为双向的？
        //     原则上连接应该是双向的，但是实际应用中，不会这么做，因为会浪费资源
        //     实际应用中，应该是接收（发送）数据后，直接关闭连接，释放资源。
        //     如果需要返回数据，那么重新建立连接，重新发送即可

    }
}
